{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 求解十字激光端点与交点\n",
    "\n",
    "1Z实验室出品\n",
    "**1ZLAB ：Make Things Easy**\n",
    "\n",
    "程序目标\n",
    "\n",
    "获取十字的中心还有四个端点的坐标\n",
    "![cross-laser-demo.png](./cross-laser-demo.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import cv2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "gray = cv2.imread('shizi.bmp', cv2.IMREAD_GRAYSCALE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(gray, cmap='gray')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# TODO 其实可以考虑降低分辨率\n",
    "binary = cv2.inRange(gray, 200, 255)\n",
    "\n",
    "plt.imshow(binary, cmap='gray')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "霍夫检测直线的文档\n",
    "http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html#hough-lines"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "253"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 返回的直线的两个端点\n",
    "# 需要调这里面的阈值\n",
    "# 返回的是线段的两个端点\n",
    "line_segs = cv2.HoughLinesP(binary, rho=2,theta=0.1, threshold=100)\n",
    "len(line_segs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x1: 573, y1: 144, x2: 933, y2: 536, weight: 532.2255161113567\n",
      "x1: 676, y1: 250, x2: 698, y2: 274, weight: 32.55764119219941\n",
      "x1: 799, y1: 434, x2: 1113, y2: 129, weight: 437.74535976980957\n",
      "x1: 792, y1: 437, x2: 1113, y2: 125, weight: 447.6438316340347\n",
      "x1: 793, y1: 434, x2: 1112, y2: 124, weight: 444.8156921692399\n",
      "x1: 817, y1: 408, x2: 1068, y2: 164, weight: 350.0528531522061\n",
      "x1: 525, y1: 93, x2: 868, y2: 468, weight: 508.20665088131227\n",
      "x1: 630, y1: 202, x2: 818, y2: 408, weight: 278.89065957826557\n",
      "x1: 488, y1: 56, x2: 814, y2: 412, weight: 482.7131653477042\n",
      "x1: 816, y1: 407, x2: 960, y2: 267, weight: 200.83824337013107\n",
      "x1: 714, y1: 520, x2: 714, y2: 520, weight: 0.0\n",
      "x1: 845, y1: 391, x2: 1113, y2: 131, weight: 373.39523296367884\n",
      "x1: 698, y1: 275, x2: 817, y2: 404, weight: 175.50498568416796\n",
      "x1: 484, y1: 54, x2: 731, y2: 324, weight: 365.9357867167408\n",
      "x1: 602, y1: 611, x2: 745, y2: 472, weight: 199.42417105255822\n",
      "x1: 755, y1: 331, x2: 820, y2: 402, weight: 96.26006440887103\n",
      "x1: 601, y1: 609, x2: 745, y2: 469, weight: 200.83824337013107\n",
      "x1: 481, y1: 54, x2: 653, y2: 242, weight: 254.80973293812778\n",
      "x1: 851, y1: 433, x2: 1001, y2: 597, weight: 222.25210910135362\n",
      "x1: 821, y1: 406, x2: 995, y2: 596, weight: 257.63540129415446\n",
      "x1: 600, y1: 608, x2: 739, y2: 473, weight: 193.7679023987203\n",
      "x1: 1024, y1: 222, x2: 1034, y2: 212, weight: 14.142135623730951\n",
      "x1: 976, y1: 267, x2: 1111, y2: 136, weight: 188.1116689628796\n",
      "x1: 824, y1: 412, x2: 993, y2: 597, weight: 250.57134712492567\n",
      "x1: 738, y1: 470, x2: 738, y2: 470, weight: 0.0\n",
      "x1: 623, y1: 582, x2: 639, y2: 566, weight: 22.627416997969522\n",
      "x1: 894, y1: 332, x2: 911, y2: 315, weight: 24.041630560342615\n",
      "x1: 820, y1: 394, x2: 832, y2: 407, weight: 17.69180601295413\n",
      "x1: 607, y1: 610, x2: 744, y2: 477, weight: 190.93978108293726\n",
      "x1: 842, y1: 371, x2: 843, y2: 370, weight: 1.4142135623730951\n",
      "x1: 773, y1: 350, x2: 777, y2: 354, weight: 5.656854249492381\n",
      "x1: 599, y1: 607, x2: 713, y2: 496, weight: 159.11316727411344\n",
      "x1: 748, y1: 322, x2: 748, y2: 322, weight: 0.0\n",
      "x1: 833, y1: 413, x2: 840, y2: 421, weight: 10.63014581273465\n",
      "x1: 478, y1: 54, x2: 512, y2: 92, weight: 50.99019513592785\n",
      "x1: 961, y1: 548, x2: 998, y2: 589, weight: 55.226805085936306\n",
      "x1: 743, y1: 318, x2: 743, y2: 318, weight: 0.0\n",
      "x1: 837, y1: 419, x2: 856, y2: 439, weight: 27.586228448267445\n",
      "x1: 609, y1: 610, x2: 746, y2: 477, weight: 190.93978108293726\n",
      "x1: 819, y1: 410, x2: 982, y2: 588, weight: 241.3565826738521\n",
      "x1: 823, y1: 395, x2: 884, y2: 336, weight: 84.86459803710851\n",
      "x1: 791, y1: 370, x2: 798, y2: 377, weight: 9.899494936611665\n",
      "x1: 825, y1: 407, x2: 999, y2: 597, weight: 257.63540129415446\n",
      "x1: 891, y1: 474, x2: 891, y2: 474, weight: 0.0\n",
      "x1: 796, y1: 372, x2: 801, y2: 378, weight: 7.810249675906654\n",
      "x1: 882, y1: 465, x2: 1001, y2: 595, weight: 176.24131184259835\n",
      "x1: 906, y1: 326, x2: 932, y2: 300, weight: 36.76955262170047\n",
      "x1: 865, y1: 373, x2: 1113, y2: 132, weight: 345.8106418258409\n",
      "x1: 654, y1: 557, x2: 672, y2: 539, weight: 25.45584412271571\n",
      "x1: 1080, y1: 157, x2: 1100, y2: 137, weight: 28.284271247461902\n",
      "x1: 837, y1: 393, x2: 857, y2: 373, weight: 28.284271247461902\n",
      "x1: 824, y1: 396, x2: 914, y2: 308, weight: 125.8729518204765\n",
      "x1: 681, y1: 255, x2: 686, y2: 260, weight: 7.0710678118654755\n",
      "x1: 687, y1: 541, x2: 750, y2: 479, weight: 88.3911760301898\n",
      "x1: 696, y1: 271, x2: 820, y2: 406, weight: 183.3057555015663\n",
      "x1: 792, y1: 424, x2: 811, y2: 405, weight: 26.870057685088806\n",
      "x1: 613, y1: 608, x2: 747, y2: 478, weight: 186.69761648183942\n",
      "x1: 490, y1: 69, x2: 510, y2: 90, weight: 29.0\n",
      "x1: 631, y1: 573, x2: 639, y2: 565, weight: 11.313708498984761\n",
      "x1: 939, y1: 526, x2: 1001, y2: 593, weight: 91.28526715741155\n",
      "x1: 919, y1: 308, x2: 946, y2: 281, weight: 38.18376618407357\n",
      "x1: 479, y1: 54, x2: 584, y2: 169, weight: 155.72411502397438\n",
      "x1: 602, y1: 610, x2: 745, y2: 471, weight: 199.42417105255822\n",
      "x1: 610, y1: 592, x2: 611, y2: 591, weight: 1.4142135623730951\n",
      "x1: 975, y1: 251, x2: 980, y2: 246, weight: 7.0710678118654755\n",
      "x1: 625, y1: 579, x2: 629, y2: 575, weight: 5.656854249492381\n",
      "x1: 792, y1: 439, x2: 817, y2: 414, weight: 35.35533905932738\n",
      "x1: 826, y1: 398, x2: 842, y2: 382, weight: 22.627416997969522\n",
      "x1: 650, y1: 553, x2: 653, y2: 550, weight: 4.242640687119285\n",
      "x1: 635, y1: 568, x2: 638, y2: 565, weight: 4.242640687119285\n",
      "x1: 843, y1: 380, x2: 873, y2: 350, weight: 42.42640687119285\n",
      "x1: 826, y1: 406, x2: 1113, y2: 127, weight: 400.26241392366586\n",
      "x1: 642, y1: 562, x2: 649, y2: 555, weight: 9.899494936611665\n",
      "x1: 1049, y1: 185, x2: 1071, y2: 163, weight: 31.11269837220809\n",
      "x1: 962, y1: 265, x2: 998, y2: 230, weight: 50.20956084253277\n",
      "x1: 496, y1: 63, x2: 809, y2: 405, weight: 463.6086711872417\n",
      "x1: 1081, y1: 152, x2: 1095, y2: 138, weight: 19.79898987322333\n",
      "x1: 955, y1: 278, x2: 978, y2: 255, weight: 32.526911934581186\n",
      "x1: 852, y1: 363, x2: 852, y2: 363, weight: 0.0\n",
      "x1: 687, y1: 523, x2: 711, y2: 499, weight: 33.94112549695428\n",
      "x1: 532, y1: 106, x2: 552, y2: 127, weight: 29.0\n",
      "x1: 625, y1: 577, x2: 625, y2: 577, weight: 0.0\n",
      "x1: 653, y1: 227, x2: 662, y2: 236, weight: 12.727922061357855\n",
      "x1: 697, y1: 508, x2: 698, y2: 507, weight: 1.4142135623730951\n",
      "x1: 912, y1: 513, x2: 917, y2: 518, weight: 7.0710678118654755\n",
      "x1: 643, y1: 560, x2: 644, y2: 559, weight: 1.4142135623730951\n",
      "x1: 481, y1: 53, x2: 687, y2: 277, weight: 304.32219767871027\n",
      "x1: 674, y1: 544, x2: 692, y2: 526, weight: 25.45584412271571\n",
      "x1: 708, y1: 498, x2: 709, y2: 497, weight: 1.4142135623730951\n",
      "x1: 1072, y1: 162, x2: 1110, y2: 125, weight: 53.03772242470448\n",
      "x1: 599, y1: 171, x2: 815, y2: 406, weight: 319.18803235710453\n",
      "x1: 852, y1: 445, x2: 858, y2: 451, weight: 8.48528137423857\n",
      "x1: 618, y1: 584, x2: 618, y2: 584, weight: 0.0\n",
      "x1: 916, y1: 514, x2: 924, y2: 522, weight: 11.313708498984761\n",
      "x1: 629, y1: 573, x2: 629, y2: 573, weight: 0.0\n",
      "x1: 945, y1: 286, x2: 964, y2: 267, weight: 26.870057685088806\n",
      "x1: 805, y1: 403, x2: 805, y2: 403, weight: 0.0\n",
      "x1: 633, y1: 569, x2: 635, y2: 567, weight: 2.8284271247461903\n",
      "x1: 714, y1: 287, x2: 714, y2: 287, weight: 0.0\n",
      "x1: 863, y1: 451, x2: 870, y2: 458, weight: 9.899494936611665\n",
      "x1: 839, y1: 430, x2: 848, y2: 439, weight: 12.727922061357855\n",
      "x1: 897, y1: 330, x2: 918, y2: 309, weight: 29.698484809834994\n",
      "x1: 826, y1: 410, x2: 865, y2: 452, weight: 57.3149195236284\n",
      "x1: 792, y1: 421, x2: 795, y2: 418, weight: 4.242640687119285\n",
      "x1: 642, y1: 581, x2: 673, y2: 550, weight: 43.840620433565945\n",
      "x1: 874, y1: 349, x2: 958, y2: 268, weight: 116.69190203266035\n",
      "x1: 793, y1: 371, x2: 810, y2: 389, weight: 24.758836806279895\n",
      "x1: 881, y1: 359, x2: 886, y2: 354, weight: 7.0710678118654755\n",
      "x1: 748, y1: 485, x2: 751, y2: 481, weight: 5.0\n",
      "x1: 738, y1: 469, x2: 738, y2: 469, weight: 0.0\n",
      "x1: 762, y1: 346, x2: 771, y2: 355, weight: 12.727922061357855\n",
      "x1: 932, y1: 516, x2: 939, y2: 523, weight: 9.899494936611665\n",
      "x1: 828, y1: 386, x2: 829, y2: 385, weight: 1.4142135623730951\n",
      "x1: 806, y1: 401, x2: 807, y2: 400, weight: 1.4142135623730951\n",
      "x1: 852, y1: 364, x2: 853, y2: 363, weight: 1.4142135623730951\n",
      "x1: 1102, y1: 131, x2: 1108, y2: 125, weight: 8.48528137423857\n",
      "x1: 832, y1: 382, x2: 833, y2: 381, weight: 1.4142135623730951\n",
      "x1: 644, y1: 561, x2: 652, y2: 553, weight: 11.313708498984761\n",
      "x1: 792, y1: 423, x2: 808, y2: 407, weight: 22.627416997969522\n",
      "x1: 1025, y1: 219, x2: 1046, y2: 198, weight: 29.698484809834994\n",
      "x1: 882, y1: 477, x2: 891, y2: 486, weight: 12.727922061357855\n",
      "x1: 792, y1: 431, x2: 810, y2: 410, weight: 27.65863337187866\n",
      "x1: 827, y1: 400, x2: 957, y2: 273, weight: 181.738823590338\n",
      "x1: 664, y1: 541, x2: 667, y2: 538, weight: 4.242640687119285\n",
      "x1: 822, y1: 409, x2: 996, y2: 598, weight: 256.8988127648705\n",
      "x1: 700, y1: 280, x2: 706, y2: 286, weight: 8.48528137423857\n",
      "x1: 854, y1: 438, x2: 1000, y2: 597, weight: 215.8633827215723\n",
      "x1: 600, y1: 609, x2: 617, y2: 592, weight: 24.041630560342615\n",
      "x1: 731, y1: 312, x2: 763, y2: 346, weight: 46.69047011971501\n",
      "x1: 823, y1: 417, x2: 825, y2: 415, weight: 2.8284271247461903\n",
      "x1: 709, y1: 522, x2: 718, y2: 513, weight: 12.727922061357855\n",
      "x1: 893, y1: 348, x2: 893, y2: 348, weight: 0.0\n",
      "x1: 1076, y1: 171, x2: 1093, y2: 154, weight: 24.041630560342615\n",
      "x1: 981, y1: 568, x2: 981, y2: 568, weight: 0.0\n",
      "x1: 725, y1: 482, x2: 735, y2: 472, weight: 14.142135623730951\n",
      "x1: 903, y1: 483, x2: 905, y2: 485, weight: 2.8284271247461903\n",
      "x1: 946, y1: 291, x2: 976, y2: 261, weight: 42.42640687119285\n",
      "x1: 870, y1: 348, x2: 876, y2: 342, weight: 8.48528137423857\n",
      "x1: 882, y1: 471, x2: 890, y2: 479, weight: 11.313708498984761\n",
      "x1: 821, y1: 392, x2: 825, y2: 396, weight: 5.656854249492381\n",
      "x1: 952, y1: 272, x2: 953, y2: 271, weight: 1.4142135623730951\n",
      "x1: 855, y1: 367, x2: 880, y2: 342, weight: 35.35533905932738\n",
      "x1: 936, y1: 530, x2: 944, y2: 538, weight: 11.313708498984761\n",
      "x1: 691, y1: 523, x2: 722, y2: 492, weight: 43.840620433565945\n",
      "x1: 828, y1: 388, x2: 834, y2: 381, weight: 9.219544457292887\n",
      "x1: 743, y1: 319, x2: 745, y2: 321, weight: 2.8284271247461903\n",
      "x1: 702, y1: 520, x2: 704, y2: 518, weight: 2.8284271247461903\n",
      "x1: 859, y1: 452, x2: 881, y2: 476, weight: 32.55764119219941\n",
      "x1: 747, y1: 324, x2: 754, y2: 331, weight: 9.899494936611665\n",
      "x1: 637, y1: 565, x2: 637, y2: 565, weight: 0.0\n",
      "x1: 831, y1: 405, x2: 832, y2: 406, weight: 1.4142135623730951\n",
      "x1: 629, y1: 574, x2: 629, y2: 574, weight: 0.0\n",
      "x1: 726, y1: 482, x2: 735, y2: 473, weight: 12.727922061357855\n",
      "x1: 717, y1: 489, x2: 719, y2: 487, weight: 2.8284271247461903\n",
      "x1: 932, y1: 518, x2: 938, y2: 524, weight: 8.48528137423857\n",
      "x1: 675, y1: 530, x2: 702, y2: 504, weight: 37.48332962798263\n",
      "x1: 833, y1: 417, x2: 836, y2: 415, weight: 3.605551275463989\n",
      "x1: 828, y1: 401, x2: 832, y2: 405, weight: 5.656854249492381\n",
      "x1: 655, y1: 574, x2: 683, y2: 541, weight: 43.278170016764804\n",
      "x1: 821, y1: 393, x2: 823, y2: 391, weight: 2.8284271247461903\n",
      "x1: 702, y1: 522, x2: 725, y2: 503, weight: 29.832867780352597\n",
      "x1: 871, y1: 459, x2: 881, y2: 470, weight: 14.866068747318506\n",
      "x1: 821, y1: 419, x2: 821, y2: 419, weight: 0.0\n",
      "x1: 689, y1: 523, x2: 718, y2: 494, weight: 41.012193308819754\n",
      "x1: 899, y1: 322, x2: 903, y2: 318, weight: 5.656854249492381\n",
      "x1: 1043, y1: 204, x2: 1055, y2: 192, weight: 16.97056274847714\n",
      "x1: 914, y1: 497, x2: 916, y2: 499, weight: 2.8284271247461903\n",
      "x1: 815, y1: 400, x2: 819, y2: 395, weight: 6.4031242374328485\n",
      "x1: 720, y1: 300, x2: 730, y2: 311, weight: 14.866068747318506\n",
      "x1: 846, y1: 374, x2: 859, y2: 361, weight: 18.384776310850235\n",
      "x1: 992, y1: 591, x2: 997, y2: 596, weight: 7.0710678118654755\n",
      "x1: 629, y1: 600, x2: 632, y2: 597, weight: 4.242640687119285\n",
      "x1: 844, y1: 390, x2: 872, y2: 362, weight: 39.59797974644666\n",
      "x1: 727, y1: 506, x2: 744, y2: 486, weight: 26.248809496813376\n",
      "x1: 820, y1: 396, x2: 825, y2: 401, weight: 7.0710678118654755\n",
      "x1: 915, y1: 496, x2: 915, y2: 496, weight: 0.0\n",
      "x1: 772, y1: 346, x2: 772, y2: 346, weight: 0.0\n",
      "x1: 639, y1: 582, x2: 669, y2: 552, weight: 42.42640687119285\n",
      "x1: 890, y1: 480, x2: 935, y2: 529, weight: 66.52818951391959\n",
      "x1: 930, y1: 517, x2: 933, y2: 520, weight: 4.242640687119285\n",
      "x1: 826, y1: 395, x2: 854, y2: 368, weight: 38.897300677553446\n",
      "x1: 945, y1: 529, x2: 955, y2: 540, weight: 14.866068747318506\n",
      "x1: 751, y1: 334, x2: 751, y2: 334, weight: 0.0\n",
      "x1: 1075, y1: 174, x2: 1076, y2: 173, weight: 1.4142135623730951\n",
      "x1: 675, y1: 251, x2: 683, y2: 259, weight: 11.313708498984761\n",
      "x1: 976, y1: 268, x2: 981, y2: 263, weight: 7.0710678118654755\n",
      "x1: 1073, y1: 175, x2: 1111, y2: 138, weight: 53.03772242470448\n",
      "x1: 863, y1: 444, x2: 863, y2: 444, weight: 0.0\n",
      "x1: 775, y1: 362, x2: 782, y2: 369, weight: 9.899494936611665\n",
      "x1: 1014, y1: 219, x2: 1043, y2: 190, weight: 41.012193308819754\n",
      "x1: 643, y1: 565, x2: 660, y2: 548, weight: 24.041630560342615\n",
      "x1: 826, y1: 405, x2: 835, y2: 414, weight: 12.727922061357855\n",
      "x1: 904, y1: 501, x2: 913, y2: 510, weight: 12.727922061357855\n",
      "x1: 845, y1: 422, x2: 845, y2: 422, weight: 0.0\n",
      "x1: 643, y1: 569, x2: 647, y2: 565, weight: 5.656854249492381\n",
      "x1: 723, y1: 496, x2: 734, y2: 484, weight: 16.278820596099706\n",
      "x1: 599, y1: 606, x2: 615, y2: 590, weight: 22.627416997969522\n",
      "x1: 929, y1: 513, x2: 931, y2: 515, weight: 2.8284271247461903\n",
      "x1: 934, y1: 523, x2: 939, y2: 528, weight: 7.0710678118654755\n",
      "x1: 806, y1: 379, x2: 806, y2: 379, weight: 0.0\n",
      "x1: 916, y1: 500, x2: 923, y2: 507, weight: 9.899494936611665\n",
      "x1: 923, y1: 505, x2: 923, y2: 505, weight: 0.0\n",
      "x1: 806, y1: 421, x2: 815, y2: 412, weight: 12.727922061357855\n",
      "x1: 813, y1: 394, x2: 816, y2: 391, weight: 4.242640687119285\n",
      "x1: 700, y1: 531, x2: 705, y2: 525, weight: 7.810249675906654\n",
      "x1: 655, y1: 231, x2: 661, y2: 237, weight: 8.48528137423857\n",
      "x1: 977, y1: 564, x2: 978, y2: 565, weight: 1.4142135623730951\n",
      "x1: 709, y1: 514, x2: 731, y2: 492, weight: 31.11269837220809\n",
      "x1: 1016, y1: 210, x2: 1016, y2: 210, weight: 0.0\n",
      "x1: 793, y1: 433, x2: 812, y2: 414, weight: 26.870057685088806\n",
      "x1: 909, y1: 314, x2: 927, y2: 296, weight: 25.45584412271571\n",
      "x1: 677, y1: 551, x2: 701, y2: 523, weight: 36.87817782917155\n",
      "x1: 981, y1: 257, x2: 1011, y2: 227, weight: 42.42640687119285\n",
      "x1: 1016, y1: 212, x2: 1018, y2: 210, weight: 2.8284271247461903\n",
      "x1: 784, y1: 370, x2: 791, y2: 377, weight: 9.899494936611665\n",
      "x1: 632, y1: 590, x2: 660, y2: 567, weight: 36.235341863986875\n",
      "x1: 904, y1: 487, x2: 907, y2: 490, weight: 4.242640687119285\n",
      "x1: 996, y1: 231, x2: 1000, y2: 227, weight: 5.656854249492381\n",
      "x1: 891, y1: 476, x2: 895, y2: 480, weight: 5.656854249492381\n",
      "x1: 715, y1: 494, x2: 739, y2: 471, weight: 33.24154027718932\n",
      "x1: 609, y1: 609, x2: 703, y2: 517, weight: 131.52946437965906\n",
      "x1: 906, y1: 498, x2: 911, y2: 503, weight: 7.0710678118654755\n",
      "x1: 708, y1: 287, x2: 717, y2: 296, weight: 12.727922061357855\n",
      "x1: 812, y1: 397, x2: 817, y2: 392, weight: 7.0710678118654755\n",
      "x1: 792, y1: 445, x2: 793, y2: 444, weight: 1.4142135623730951\n",
      "x1: 965, y1: 551, x2: 970, y2: 556, weight: 7.0710678118654755\n",
      "x1: 1000, y1: 245, x2: 1003, y2: 242, weight: 4.242640687119285\n",
      "x1: 842, y1: 422, x2: 853, y2: 434, weight: 16.278820596099706\n",
      "x1: 745, y1: 486, x2: 751, y2: 480, weight: 8.48528137423857\n",
      "x1: 1057, y1: 190, x2: 1075, y2: 172, weight: 25.45584412271571\n",
      "x1: 618, y1: 590, x2: 639, y2: 569, weight: 29.698484809834994\n",
      "x1: 496, y1: 64, x2: 499, y2: 67, weight: 4.242640687119285\n",
      "x1: 639, y1: 211, x2: 642, y2: 214, weight: 4.242640687119285\n",
      "x1: 983, y1: 582, x2: 988, y2: 587, weight: 7.0710678118654755\n",
      "x1: 891, y1: 472, x2: 895, y2: 476, weight: 5.656854249492381\n",
      "x1: 669, y1: 255, x2: 788, y2: 384, weight: 175.50498568416796\n",
      "x1: 681, y1: 534, x2: 690, y2: 525, weight: 12.727922061357855\n",
      "x1: 981, y1: 253, x2: 1013, y2: 221, weight: 45.254833995939045\n",
      "x1: 916, y1: 305, x2: 916, y2: 305, weight: 0.0\n",
      "x1: 776, y1: 361, x2: 785, y2: 370, weight: 12.727922061357855\n",
      "x1: 726, y1: 502, x2: 743, y2: 482, weight: 26.248809496813376\n",
      "x1: 663, y1: 233, x2: 663, y2: 233, weight: 0.0\n",
      "x1: 747, y1: 325, x2: 821, y2: 405, weight: 108.97706180660222\n",
      "x1: 660, y1: 553, x2: 688, y2: 525, weight: 39.59797974644666\n",
      "x1: 901, y1: 482, x2: 901, y2: 482, weight: 0.0\n",
      "x1: 985, y1: 574, x2: 989, y2: 578, weight: 5.656854249492381\n",
      "x1: 711, y1: 292, x2: 716, y2: 297, weight: 7.0710678118654755\n",
      "x1: 885, y1: 481, x2: 903, y2: 500, weight: 26.1725046566048\n",
      "x1: 997, y1: 229, x2: 999, y2: 227, weight: 2.8284271247461903\n",
      "x1: 808, y1: 413, x2: 812, y2: 409, weight: 5.656854249492381\n",
      "x1: 605, y1: 610, x2: 727, y2: 491, weight: 170.42593699317015\n",
      "x1: 886, y1: 469, x2: 889, y2: 472, weight: 4.242640687119285\n",
      "x1: 911, y1: 325, x2: 941, y2: 295, weight: 42.42640687119285\n"
     ]
    }
   ],
   "source": [
    "# 这段代码只是展示一下，可以删除\n",
    "import math\n",
    "\n",
    "for lseg in line_segs:\n",
    "    # \n",
    "    x1,y1,x2,y2 = lseg[0]\n",
    "    # 计算权重\n",
    "    weight = math.sqrt(math.pow(x1-x2, 2) + math.pow(y1-y2, 2))\n",
    "    print('x1: {}, y1: {}, x2: {}, y2: {}, weight: {}'.format(x1, y1, x2, y2, weight))\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对线段进行加权\n",
    "预备知识是假设已知画面中有两条线,根据线段长度进行加权，获取两个线段。\n",
    "？用机器学习的方法？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "def calculate_line(x1, y1, x2, y2):\n",
    "    '''\n",
    "    计算直线\n",
    "    如果直线水平或者垂直，统一向一个方向倾斜特定角度。\n",
    "    TODO 这里面没有考虑水平或者垂直的情况\n",
    "    '''\n",
    "    if x1 > x2:\n",
    "        x1,y1,x2,y2 = x2,y2,x1,y1\n",
    "    if x1 == x2 or y1 == y2:\n",
    "        # 有时候会出现单个像素点 x1 = x2 而且 y1 = y2\n",
    "        print('x1:{} y1:{} x2:{} y2:{}'.format(x1, y1, x2, y2))\n",
    "    k = (y1 - y2) / (x1 - x2)\n",
    "    b = (y2 * x1 - y1*x2) / (x1 - x2)\n",
    "    \n",
    "    return k,b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# BUG k b 改一个line，剩余的全改\n",
    "\n",
    "\n",
    "lines = []\n",
    "         \n",
    "# 最小权值\n",
    "min_weight = 20\n",
    "# 相同k之间最大的差距\n",
    "max_k_distance = 0.3\n",
    "\n",
    "for lseg in line_segs:\n",
    "    # 获取线段端点值\n",
    "    x1,y1,x2,y2 = lseg[0]\n",
    "    if x1 > x2:\n",
    "        x1, y1, x2, y2 = x2, y2, x1, y1\n",
    "        \n",
    "    # 计算权重\n",
    "    weight = math.sqrt(math.pow(x1 - x2, 2) + math.pow(y1 - y2, 2))\n",
    "    \n",
    "    if weight != 0 and weight > min_weight:\n",
    "        # 计算K与b\n",
    "        k, b = calculate_line(x1, y1, x2, y2)\n",
    "        # print('k: {:.2f}, b: {:.2f}, weight: {:.2f}'.format(k, b, weight))\n",
    "        \n",
    "        if len(lines) == 0:\n",
    "            # 初次填充line\n",
    "            line = {}\n",
    "            line['cur_k'] = k\n",
    "            line['cur_b'] = b\n",
    "            line['k_sum'] = k * weight\n",
    "            line['b_sum'] = b * weight\n",
    "            line['weight_sum'] = weight\n",
    "            line['x1'] = x1\n",
    "            line['y1'] = y1\n",
    "            line['x2'] = x2\n",
    "            line['y2'] = y2\n",
    "            lines.append(line)\n",
    "            continue\n",
    "        \n",
    "        # 根据k的差异做加权\n",
    "        # 首先获取lines数组里面k举例最近的那个\n",
    "        \n",
    "        neighbor_line = min(lines, key=lambda line:abs(line['cur_k'] - k))\n",
    "        \n",
    "        if  abs(neighbor_line['cur_k'] - k) < max_k_distance:\n",
    "            # 小于最大k差值，认为是同一条线\n",
    "            \n",
    "            neighbor_line['weight_sum'] += weight\n",
    "            neighbor_line['k_sum'] += k * weight\n",
    "            neighbor_line['b_sum'] += b * weight\n",
    "            neighbor_line['cur_k'] = neighbor_line['k_sum'] / neighbor_line['weight_sum']\n",
    "            neighbor_line['cur_b'] = neighbor_line['b_sum'] / neighbor_line['weight_sum']\n",
    "            \n",
    "            if neighbor_line['x1'] > x1:\n",
    "                neighbor_line['x1'] = x1\n",
    "                neighbor_line['y1'] = y1\n",
    "                \n",
    "            if neighbor_line['x2'] < x2:\n",
    "                neighbor_line['x2'] = x2\n",
    "                neighbor_line['y2'] = y2\n",
    "            \n",
    "        else:\n",
    "            # 添加另外一条线\n",
    "            # 初次填充line\n",
    "            line = {}\n",
    "            line['cur_k'] = k\n",
    "            line['cur_b'] = b\n",
    "            line['k_sum'] = k * weight\n",
    "            line['b_sum'] = b * weight\n",
    "            line['weight_sum'] = weight\n",
    "            line['x1'] = x1\n",
    "            line['y1'] = y1\n",
    "            line['x2'] = x2\n",
    "            line['y2'] = y2\n",
    "            lines.append(line)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[{'b_sum': -3304027.8377846032,\n",
       "  'cur_b': -482.1075439824276,\n",
       "  'cur_k': 1.0900334200603314,\n",
       "  'k_sum': 7470.32650483927,\n",
       "  'weight_sum': 6853.300428555484,\n",
       "  'x1': 478,\n",
       "  'x2': 1001,\n",
       "  'y1': 54,\n",
       "  'y2': 597},\n",
       " {'b_sum': 8948293.312710544,\n",
       "  'cur_b': 1209.7121822845368,\n",
       "  'cur_k': -0.9799324921216083,\n",
       "  'k_sum': -7248.603010345705,\n",
       "  'weight_sum': 7397.043233715087,\n",
       "  'x1': 599,\n",
       "  'x2': 1113,\n",
       "  'y1': 607,\n",
       "  'y2': 129}]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 整合后的直线\n",
    "print(len(lines))\n",
    "lines\n",
    "\n",
    "# TODO 如果len(lines)小于2 抛出异常"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在画面中绘制两条直线与四个顶点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 根据权重对lines数组进行排序， 取前两个（lines的长度有可能大于2）\n",
    "sorted_lines = sorted(lines, key=lambda line: line['weight_sum'])[::-1]\n",
    "line1 = sorted_lines[0]\n",
    "line2 = sorted_lines[1]\n",
    "# 计算两个线之间的交点\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_intersection(line1, line2):\n",
    "    a1 = line1['y2'] - line1['y1']\n",
    "    b1 = line1['x1'] - line1['x2']\n",
    "    c1 = line1['x2'] * line1['y1'] - line1['x1'] * line1['y2']\n",
    "    \n",
    "    a2 = line2['y2'] - line2['y1']\n",
    "    b2 = line2['x1'] - line2['x2']\n",
    "    c2 = line2['x2'] * line2['y1'] - line2['x1'] * line2['y2']\n",
    "    \n",
    "    if (a1 * b2 - a2 * b1) != 0 and (a2 * b1 - a1 * b2) != 0:\n",
    "        cross_x = int((b1*c2-b2*c1)/(a1*b2-a2*b1))\n",
    "        cross_y = int((c1*a2-c2*a1)/(a1*b2-a2*b1))\n",
    "        return (cross_x, cross_y)\n",
    "    return None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cx: 816 cy: 405\n"
     ]
    }
   ],
   "source": [
    "(cx, cy) = calculate_intersection(line1, line2)\n",
    "print('cx: {} cy: {}'.format(cx, cy))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "canvas = cv2.cvtColor(binary, cv2.COLOR_GRAY2BGR)\n",
    "\n",
    "# 绘制第一条线\n",
    "pt_radius = 20\n",
    "cv2.circle(canvas, (line1['x1'], line1['y1']),pt_radius, (255, 0, 0), thickness=-1)\n",
    "cv2.circle(canvas, (line1['x2'], line1['y2']),pt_radius, (0, 255, 0), thickness=-1)\n",
    "cv2.circle(canvas, (line2['x1'], line2['y1']),pt_radius, (0, 255, 255), thickness=-1)\n",
    "cv2.circle(canvas, (line2['x2'], line2['y2']),pt_radius, (0, 0, 255), thickness=-1)\n",
    "\n",
    "cv2.circle(canvas, (cx, cy), 40, (255, 0, 255), thickness=20)\n",
    "\n",
    "plt.imshow(cv2.cvtColor(canvas, cv2.COLOR_BGR2RGB))\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
